#include <iostream>
#include <cstdlib>
#include <ctime>
#include <algorithm>
#include <climits>
#include <vector>
using namespace std;
template<class I,class O>
struct testClass
{
    testClass(){cout<<"I,O"<<endl;}
};
//模板特化，提供更优解
template <class T>
struct testClass<T*,T*>
{
    testClass(){cout<<"T*,T*"<<endl;}
};
void test01()
{
    testClass<int, double> a;
    testClass<int*, int*> b;
    testClass<int*, char*> c;
}

void swap1(int a,int b){swap(a,b);}
void test02()
{
    int x=2100000000;
    int begin=clock();
    while(x--)
    {
        swap1(1,2);
    }
    int end=clock();
    cout<<end-begin<<endl;
}
// template<typename T>
// class print
// {
// public:
//     void operator()(const T& elem)
//     {
//         cout<<elem<<" ";
//     }
// };
template <typename T>
void print(int elem)
{
    cout<<elem<<" ";
}
void test03()
{
    int a[6]={0,1,2,3,4,5};
    vector<int> v(a,a+6);
    for_each(v.begin(),v.end(),print<int>);
}
void test04()
{
class testClass
{
    public:
        int _mi;
    public:
        testClass(int i):_mi(i){}
        int& operator*() const
        {
            return (int&)_mi;
        }
}; 
    int f(10);
    cout<<f;
}
int main()
{
    // test01();
    //test02();
    //test03();
    test04();
    return 0;
}